package com.leetcode.滑动窗口;

import java.util.*;

//无重复字符的最长字串
public class lc_3 {
    public static void main(String[] args) {
        String s = "pwwkew";
        System.out.println(lengthOfLongestSubstring(s));
    }

    //给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
    public static int lengthOfLongestSubstring(String s) {
        if(s == null || s.length() == 0){
            return 0;
        }
        char[] chars = s.toCharArray();
        //使用map集合判断是否存在重复的字符 key唯一,key = 字符  value = 数组下标
        Map<Character, Integer> map = new HashMap<>();
        int low = 0;
        int maxSubstr = 0;
        for (int fast = 0; fast < chars.length; fast++) {
            //判断map中是否存在重复的字符
            if (map.containsKey(chars[fast]) && map.get(chars[fast]) >= low) {
                low = map.get(chars[fast]) + 1;
            }
            //如果重复,low = 重复字符的下一个 ,low = map.get(chars[fast]) + 1
            map.put(chars[fast], fast);
            maxSubstr = Math.max(maxSubstr, fast - low + 1);
        }
        return maxSubstr;
    }

}
